From d3b230fc46ee9853064e167f6cb4da8ea0a08112 Mon Sep 17 00:00:00 2001 From: Jan Beulich Date: Mon, 19 Feb 2018 14:00:31 +0100 Subject: [PATCH] shut down domain when last vCPU goes down MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit I've just had to deal with an early boot crash of Linux which occurred so early that even "earlyprintk=xen" did not produce any useful output. Hence the domain appeared to hang, while in fact it had brought down its only vCPU. By translating this to a shutdown, the situation will be better recognizable. Signed-off-by: Jan Beulich Reviewed-by: Andrew Cooper Reviewed-by: Roger Pau Monné --- xen/common/domain.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/xen/common/domain.c b/xen/common/domain.c index 4567773fe2..e1c003d71e 100644 --- a/xen/common/domain.c +++ b/xen/common/domain.c @@ -1321,6 +1321,22 @@ long do_vcpu_op(int cmd, unsigned int vcpuid, XEN_GUEST_HANDLE_PARAM(void) arg) break; case VCPUOP_down: + for_each_vcpu ( d, v ) + if ( v->vcpu_id != vcpuid && !test_bit(_VPF_down, &v->pause_flags) ) + { + rc = 1; + break; + } + + if ( !rc ) /* Last vcpu going down? */ + { + domain_shutdown(d, SHUTDOWN_poweroff); + break; + } + + rc = 0; + v = d->vcpu[vcpuid]; + #ifdef CONFIG_X86 if ( pv_shim ) rc = continue_hypercall_on_cpu(0, pv_shim_cpu_down, v); -- 2.30.2